package com.mallbook.model.mapper;

import com.mallbook.model.pojo.Orders;
import com.mallbook.model.pojo.UcenterOrderInfo;
import com.mallbook.model.pojo.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Author 宋明松
 * @Version V1.0.0
 * @Date 2022-06-21
 * 订单数据访问层接口
 */
public interface OrdersMapper {
    /**
     * 增加
     *
     * @param orders 订单信息实体类
     */
    void add(Orders orders);

    /**
     * 删除（物理删除）单条数据
     *
     * @param id     订单ID
     * @param userId 用户ID
     */
    void delete(@Param("id") Integer id, @Param("userId") Integer userId);

    /**
     * 批量删除（物理删除）
     *
     * @param ids 订单的ID集合
     */
    void deleteMore(List<Integer> ids);

    /**
     * 修改一条信息
     *
     * @param orders 需要修改的订单信息
     * @param userId 修改该订单的用户，没有就传 null
     */
    void update(@Param("orders") Orders orders, @Param("userId") Integer userId);

    /**
     * 通过订单ID批量修改订单
     *
     * @param ids    订单id的集合
     * @param orders 需要修改的信息
     */
    void updateMore(@Param("list") List<Integer> ids, @Param("orders") Orders orders);

    /**
     * 查询所有
     *
     * @return
     */
    List<Orders> findOrders();

    /**
     * -------------通过条件查询-------------
     *
     * @param orders 需要查询的订单信息
     * @param user   需要查询的订单用户信息
     * @return 订单结果集
     */
    List<Orders> findOrdersByCondition(@Param("orders") Orders orders, @Param("user") User user);

    /**
     * 通过ID查询
     *
     * @param id 订单的ID
     * @return
     */
    Orders findOrdersById(int id);

    /**
     * 查询最新订单
     * @param size 最新订单的数量
     * @return
     */
    List<Orders> findNewOrders(int size);

    /**
     * 查询用户订单统计数据
     * @param uid 用户ID
     * @return
     */
    List<UcenterOrderInfo> findUcenterOrderInfos(Integer uid);
}
